from django.db import models

# Create your models here.
"""
# 执行下面命令创建数据库
python manage.py makemigrations
python manage.py migrate
"""


class UserType(models.Model):
    name = models.CharField(max_length=32)


class UserInfo(models.Model):
    username = models.CharField(max_length=30)
    pwd = models.CharField(max_length=32)
    email = models.CharField(max_length=32)
    user_type = models.ForeignKey(UserType, on_delete=models.CASCADE)


"""
参数说明：
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE：此值设置，是级联删除。
PROTECT：此值设置，是会报完整性错误。
SET_NULL：此值设置，会把外键设置为null，前提是允许为null。
SET_DEFAULT：此值设置，会把设置为外键的默认值。
SET()：此值设置，会调用外面的值，可以是一个函数。
一般情况下使用CASCADE就可以了。
"""


class Business(models.Model):
    # id
    caption = models.CharField(max_length=32)
    code = models.CharField(max_length=32, null=True)


class Host(models.Model):
    nid = models.AutoField(primary_key=True)
    hostname = models.CharField(max_length=32, db_index=True)
    ip = models.GenericIPAddressField(protocol='ipv4', db_index=True)
    port = models.IntegerField()
    b = models.ForeignKey(to='Business', to_field='id', on_delete=models.CASCADE)  # b 代指另外一个表的数据


class Application(models.Model):
    name = models.CharField(max_length=32)
    r = models.ManyToManyField('Host')  # 自动创建关联


# class HostToApp(models.Model):
#     """手动创建关联"""
#     hobj = models.ForeignKey(to='Host', to_field='nid', on_delete=models.CASCADE)
#     aobj = models.ForeignKey(to='Application', to_field='id', on_delete=models.CASCADE)


class User(models.Model):
    username = models.CharField(max_length=16)
    password = models.CharField(max_length=32)
